package com.test11_泛型;

/**
 * 泛型通配符
 */
public class YootkDemo_02 {

    public static void main(String[] args) {
        {
            Message<String> message = new Message<>();
            message.setContent("www.yootk.com");
            info(message);  // 引用传递
            Message<Double> message2 = new Message<>();
            message2.setContent(99.66);
            info(message2);
        }
        System.out.println("==============================");
        {
            Message<Integer> message = new Message<>();
            message.setContent(1314);
            info2(message);
            Message<Float> message2 = new Message<>();
            message2.setContent(3.14F);
            info2(message2);
        }
        System.out.println("==============================");
        {
            Message<String> message = new Message<>();
            message.setContent("Hello World");
            info3(message);
            Message<Comparable> message2 = new Message<>();
            message2.setContent('a');
            info3(message2);
        }
    }

    /**
     * 泛型通配符<?>
     * 可以接收所有类型的对象实例，
     * 但是不允许内容的修改，而只是完成内容的获取
     */
    public static void info(Message<?> temp) {
        // temp.setContent(3.14);
        System.out.println(temp.getContent());
    }

    /**
     * 设置泛型的上限<? extends 类>
     * 只能使用类或者其子类，作为泛型类型
     */
    public static void info2(Message<? extends Number> temp) {
        System.out.println(temp.getContent());
    }

    /**
     * 设置泛型的下限<? super 类>
     * 只能设置类或者其父类，作为泛型类型
     */
    public static void info3(Message<? super String> temp) {
        System.out.println(temp.getContent());
    }
}
